/**
 * 主应用入口
 * 加载所有模块并初始化应用
 */
(function(window) {
    'use strict';
    
    // 加载所有模块
    const modules = [
        'static/js/modules/cart.js',
        'static/js/modules/product.js',
        'static/js/modules/transaction.js',
        'static/js/modules/store.js',
        'static/js/modules/system.js',
        'static/js/modules/language.js',
        'static/js/modules/ui.js'
    ];
    
    // 等待DOM加载完成
    $(document).ready(function() {
        // 初始化应用
        initializeApp();
        switchLanguage(Storage.language || 'zh');
    });
    
    /**
     * 初始化应用
     */
    function initializeApp() {
        // 初始化商店设置
        if (window.StoreModule) {
            window.StoreModule.getStoreSettings().done(function(settings) {
                if (settings) {
                    window.StoreModule.updateStoreName(
                        settings.store_name_zh || '商店名称',
                        settings.store_name_uy || 'دۈكان ئاتى'
                    );
                }
            });
        }
        
        // 获取系统统计数据
        if (window.SystemModule) {
            window.SystemModule.fetchSystemStats();
        }
        
        // 初始化事件监听器
        initializeEventListeners();
        
        // 初始化UI
        if (window.UIModule) {
            window.UIModule.renderCart();
        }

        if (window.LanguageModule) {
            window.LanguageModule.switchLanguage('zh');
        }
    }
    
    /**
     * 初始化事件监听器
     */
    function initializeEventListeners() {
        // 条码输入事件
        $('#barcode').on('input', handleBarcodeInput);
        
        // 商品条码输入事件
        $('#productBarcode').on('input', handleProductBarcodeInput);
        
        // 删除按钮事件
        $(document).on('click', '.delete-btn', handleDeleteProduct);

        // 开始结算按钮事件
        $('#startSettlementText').on('click', handleSettleClick);
        
        // 语言切换事件
        $('#lang-zh').on('click', () => {
            if (window.LanguageModule) {
                window.LanguageModule.switchLanguage('zh');
            }
        });
        
        $('#lang-uy').on('click', () => {
            if (window.LanguageModule) {
                window.LanguageModule.switchLanguage('uy');
            }
        });
        
        // 购物车操作
        $('#clearAll').on('click', handleClearCart);
        $('#settleBill').on('click', handleSettleBill);
        
        // 菜单切换
        $('.nav-link').on('click', handleMenuSwitch);
        
        // 近效期警告菜单点击事件
        $('a[data-target="expiry_warning"]').on('click', function(e) {
            e.preventDefault();
            setTimeout(() => {
                // 延迟执行以确保页面已切换
                loadExpiryWarnings(1); // 加载第一页数据
            }, 100);
        });
        
        // 商品表单提交事件
        $('#productForm').on('submit', handleProductFormSubmit);
        
        // 其他事件...
    }
    
    /**
     * 处理商品表单提交
     */
    function handleProductFormSubmit(e) {
        e.preventDefault(); // 阻止默认提交行为
        
        // 判断是添加还是修改操作
        const isUpdate = $(e.originalEvent.submitter).attr('id') === 'updateProduct';
        
        // 获取表单数据
        const productData = {
            barcode: $('#productBarcode').val().trim(),
            name: $('#productName').val().trim(),
            price: parseFloat($('#productPrice').val().trim()),
            unit: $('#productUnit').val().trim(),
            stock: parseInt($('#productStock').val().trim()),
            expiry_date: $('#productExpiryDate').val().trim() || null
        };
        
        // 表单验证
        if (!productData.barcode || productData.barcode.length !== 13) {
            alert('请输入有效的13位商品条码');
            return;
        }
        
        if (!productData.name) {
            alert('请输入商品名称');
            return;
        }
        
        if (isNaN(productData.price) || productData.price <= 0) {
            alert('请输入有效的商品价格');
            return;
        }
        
        if (!productData.unit) {
            alert('请输入商品单位');
            return;
        }
        
        if (isNaN(productData.stock) || productData.stock < 0) {
            alert('请输入有效的库存数量');
            return;
        }
        
        // 调用相应的AJAX方法
        if (window.ProductModule) {
            if (isUpdate) {
                // 更新商品
                // 确保传递正确的barcode参数
                const barcode = productData.barcode;
                window.ProductModule.updateProduct(barcode, productData)
                    .done(function(response) {
                        if (response.success) {
                            alert('商品更新成功');
                            // 重置表单或跳转到列表
                            resetProductForm();
                        } else {
                            alert('商品更新失败: ' + (response.message || '未知错误'));
                        }
                    })
                    .fail(function() {
                        alert('商品更新失败，请检查网络连接');
                    });
            } else {
                // 添加商品
                window.ProductModule.addProduct(productData)
                    .done(function(response) {
                        if (response.success) {
                            alert('商品添加成功');
                            // 重置表单
                            resetProductForm();
                        } else {
                            alert('商品添加失败: ' + (response.message || '未知错误'));
                        }
                    })
                    .fail(function() {
                        alert('商品添加失败，请检查网络连接');
                    });
            }
        }
    }
    
    /**
     * 重置商品表单
     */
    function resetProductForm() {
        $('#productForm')[0].reset();
        $('#productBarcode').focus();
        // 确保显示添加商品按钮，隐藏更新按钮
        $('#updateProduct').hide();
        $('button[type="submit"]:not(#updateProduct)').show();
        // 清除全局商品对象
        window.product = null;
    }
    
    /**
     * 处理条码输入
     */
    function handleBarcodeInput() {
        const barcode = $(this).val();
        if (barcode.length === 13) {
            if (!window.ProductModule || !window.ProductModule.validateEAN13(barcode)) {
                const currentLang = window.currentLang || 'zh';
                const trans = window.translations?.[currentLang];
                alert(trans?.invalidBarcode || '无效的条码');
                return;
            }
            
            if (window.ProductModule) {
                window.ProductModule.getProductByBarcode(barcode)
                    .done(function(product) {
                        if (product && (!product.hasOwnProperty('success') || product.success !== false)) {
                            const stock = parseInt(product.stock) || 0;
                            const currentLang = window.currentLang || 'zh';
                            const trans = window.translations?.[currentLang];
                            
                            if (stock <= 0) {
                                alert(trans?.stockInsufficient || '商品库存不足，无法添加到购物车');
                                $('#barcode').val('');
                            } else {
                                if (window.CartModule) {
                                    window.CartModule.addProductToCart(product);
                                }
                                if (window.UIModule) {
                                    window.UIModule.renderCart();
                                }
                                if (window.CartModule) {
                                    window.CartModule.updateTotalPrice();
                                }
                                $('#barcode').val('');
                            }
                        } else {
                            const currentLang = window.currentLang || 'zh';
                            const trans = window.translations?.[currentLang];
                            alert(trans?.productNotFound || '未找到该商品');
                            $('#barcode').val('');
                        }
                    })
                    .fail(function() {
                        const currentLang = window.currentLang || 'zh';
                        const trans = window.translations?.[currentLang];
                        alert(trans?.fetchFailed || '获取商品信息失败');
                        $('#barcode').val('');
                    });
            }
        }
    }
    
    /**
     * 处理商品条码输入
     */
    function handleProductBarcodeInput() {
        const barcode = $(this).val().trim();
        if (barcode.length === 13) {
            if (!window.ProductModule || !window.ProductModule.validateEAN13(barcode)) {
                const currentLang = window.currentLang || 'zh';
                const trans = window.translations?.[currentLang];
                alert(trans?.invalidBarcode || '无效的条码');
                return;
            }
            
            if (window.ProductModule) {
                window.ProductModule.getProductByBarcode(barcode)
                    .done(function(response) {
                        if (response && !response.error && response.barcode) {
                            // 商品存在，进入编辑模式
                            window.product = {...response};
                            $('#productName').val(response.name || '');
                            $('#productPrice').val(response.price ? parseFloat(response.price).toFixed(2) : '');
                            $('#productUnit').val(response.unit || '个');
                            $('#productStock').val(response.stock || '0');
                            $('#productName').focus();
                            
                            // 显示更新按钮，隐藏添加按钮
                            $('#updateProduct').show();
                            $('button[type="submit"]:not(#updateProduct)').hide();
                        } else {
                            // 商品不存在，进入添加模式
                            window.product = { barcode: barcode };
                            // 清理除了条码之外的表单字段
                            $('#productName').val('');
                            $('#productPrice').val('');
                            $('#productUnit').val('');
                            $('#productStock').val('');
                            const currentLang = window.currentLang || 'zh';
                            const trans = window.translations?.[currentLang];
                            alert(trans?.productNotFound || '商品不存在，请完善商品信息后添加');
                            $('#productName').focus();
                            
                            // 显示添加按钮，隐藏更新按钮
                            $('#updateProduct').hide();
                            $('button[type="submit"]:not(#updateProduct)').show();
                        }
                    })
                    .fail(function() {
                        // 请求失败，进入添加模式
                        window.product = { barcode: barcode };
                        // 清理除了条码之外的表单字段
                        $('#productName').val('');
                        $('#productPrice').val('');
                        $('#productUnit').val('');
                        $('#productStock').val('');
                        const currentLang = window.currentLang || 'zh';
                        const trans = window.translations?.[currentLang];
                        alert(trans?.productNotFound || '商品不存在，请完善商品信息后添加');
                        $('#productName').focus();
                        
                        // 显示添加按钮，隐藏更新按钮
                        $('#updateProduct').hide();
                        $('button[type="submit"]:not(#updateProduct)').show();
                    });
            }
        }
    }
    
    /**
     * 处理删除商品
     */
    function handleDeleteProduct(e) {
        e.stopPropagation();
        e.preventDefault();
        const barcode = $(this).attr('data-id');
        
        if (window.CartModule) {
            window.CartModule.removeProductFromCart(barcode);
            if (window.UIModule) {
                window.UIModule.renderCart();
            }
            if (window.CartModule) {
                window.CartModule.updateTotalPrice();
            }
        }
        
        return false;
    }
    
    /**
     * 处理清空购物车
     */
    function handleClearCart() {
        if (window.CartModule) {
            window.CartModule.clearCart();
        }
        if (window.UIModule) {
            window.UIModule.renderCart();
        }
        if (window.CartModule) {
            window.CartModule.updateTotalPrice();
        }
    }
    
    /**
     * 处理结算
     */
    function handleSettleBill() {
        const currentLang = window.currentLang || 'zh';
        const trans = window.translations?.[currentLang];
        const cart = window.CartModule ? window.CartModule.getCart() : window.cart || [];
        
        if (cart.length === 0) {
            alert(trans?.cartEmpty || '购物车为空');
            return;
        }
        
        if (window.TransactionModule) {
            window.TransactionModule.settleBill(cart)
                .done(function(response) {
                    if (response.success) {
                        const total = parseFloat(response.total) || 0;
                        alert((trans?.settleSuccess || '结算成功') + total.toFixed(2) + (trans?.yuan || '元'));
                        if (window.CartModule) {
                            window.CartModule.clearCart();
                        }
                        if (window.UIModule) {
                            window.UIModule.renderCart();
                        }
                        if (window.CartModule) {
                            window.CartModule.updateTotalPrice();
                        }
                    } else {
                        alert((trans?.settleFailed || '结算失败') + (response.message || ''));
                    }
                })
                .fail(function() {
                    alert(trans?.settleFailed || '结算失败');
                });
        }
    }

    /**
     * 处理菜单切换
     */
    function handleMenuSwitch(e) {
        e.preventDefault();
        const target = $(this).data('target');
        // 切换菜单项的活动状态
        $('.nav-link').removeClass('active');
        $(this).addClass('active');
        
        // 隐藏所有内容区域，再显示当前选中模块对应的内容区域
        $('.card-content').addClass('d-none');
        $('#' + target).removeClass('d-none');
        
        const currentLang = window.currentLang || 'zh';
        const trans = window.translations?.[currentLang];
        const moduleName = trans?.[target] || target;
        $('#module-name').text(`${trans?.modulePrefix || ''}${moduleName}`);
        
        if (target === 'settle') {
            $('#barcode').focus();
        } else if (target === 'add') {
            $('#productBarcode').focus();
        }
        
        // 如果是库存警告页面，加载库存警告数据
        if (target === 'warning' && window.ProductModule) {
            // 加载第一页数据
            loadStockWarnings(1);
        }
        
        // 如果是近效期警告页面，加载近效期警告数据
        if (target === 'expiry_warning' && window.ProductModule) {
            // 加载第一页数据
            loadExpiryWarnings(1);
        }
        
        // 如果是结算明细页面，加载结算明细数据
        if (target === 'settle_detail' && window.TransactionModule) {
            window.TransactionModule.loadTransactions();
        }
    }
    
    /**
     * 渲染库存警告表格
     */
    function renderWarningTable(products) {
        const warningTable = $('#warningTable').find('tbody');
        warningTable.empty();
        
        if (!products || products.length === 0) {
            warningTable.html('<tr><td colspan="6" class="text-center">暂无库存警告</td></tr>');
            return;
        }
        
        products.forEach(function(product) {
            // 格式化日期为年月日格式
            let formattedDate = '-';
            if (product.expiry_date) {
                const date = new Date(product.expiry_date);
                if (!isNaN(date.getTime())) {
                    formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
                }
            }
            
            // 如果是零库存商品，添加text-danger类实现红色字体突出显示
            const rowClass = product.is_zero_stock ? 'text-danger' : '';
            
            const row = `<tr class="${rowClass}">
                <td>${product.barcode}</td>
                <td>${product.name}</td>
                <td>${product.price}</td>
                <td>${product.unit}</td>
                <td>${product.stock}</td>
                <td>${formattedDate}</td>
            </tr>`;
            warningTable.append(row);
        });
    }
    
    /**
     * 加载库存警告数据
     */
    function loadStockWarnings(page) {
        const pageSize = 10; // 每页显示10条记录
        
        if (window.ProductModule) {
            window.ProductModule.getStockWarnings(page, pageSize).done(function(response) {
                if (response.success) {
                    // 渲染表格
                    renderWarningTable(response.products);
                    
                    // 更新分页信息和按钮状态
                    updateStockWarningPagination(response.page, response.total_pages);
                } else {
                    alert(response.message || '加载库存警告失败');
                }
            }).fail(function() {
                console.error('加载库存警告数据失败');
                alert('加载库存警告数据失败');
            });
        }
    }
    
    /**
     * 更新库存警告分页控件
     */
    function updateStockWarningPagination(currentPage, totalPages) {
        // 更新分页信息显示
        $('#stockPageInfo').text(`${currentPage} 页 共 ${totalPages} 页`);
        
        // 更新按钮状态
        $('#stockPrevPage').prop('disabled', currentPage === 1);
        $('#stockNextPage').prop('disabled', currentPage === totalPages);
    }
    
    // 添加分页按钮点击事件
    $('#stockPrevPage').on('click', function() {
        const currentPage = parseInt($('#stockPageInfo').text().split(' ')[0]);
        if (currentPage > 1) {
            loadStockWarnings(currentPage - 1);
        }
    });
    
    $('#stockNextPage').on('click', function() {
        const currentPage = parseInt($('#stockPageInfo').text().split(' ')[0]);
        const totalPages = parseInt($('#stockPageInfo').text().split(' ')[3]);
        if (currentPage < totalPages) {
            loadStockWarnings(currentPage + 1);
        }
    });
    
    /**
     * 加载近效期警告数据
     */
    function loadExpiryWarnings(page) {
        const pageSize = 10; // 每页显示10条记录
        
        if (window.ProductModule) {
            window.ProductModule.getExpiryWarnings(page, pageSize).done(function(response) {
                // 确保商品数据按照已过期优先排序
                // 后端已经进行了排序，但为了确保在任何情况下都能正确显示，前端也做一次排序处理
                const today = new Date();
                today.setHours(0, 0, 0, 0);
                
                const sortedProducts = response.products.sort(function(a, b) {
                    // 检查a是否过期
                    const aIsExpired = a.expiry_date ? new Date(a.expiry_date) < today : false;
                    // 检查b是否过期
                    const bIsExpired = b.expiry_date ? new Date(b.expiry_date) < today : false;
                    
                    // 已过期商品排在前面
                    if (aIsExpired && !bIsExpired) return -1;
                    if (!aIsExpired && bIsExpired) return 1;
                    
                    // 过期状态相同的，按照过期日期排序
                    const aDate = a.expiry_date ? new Date(a.expiry_date) : new Date(0);
                    const bDate = b.expiry_date ? new Date(b.expiry_date) : new Date(0);
                    return aDate - bDate;
                });
                
                renderExpiryWarningTable(sortedProducts, page, response.total_pages);
            }).fail(function() {
                console.error('加载近效期警告数据失败');
            });
        }
    }
    
    /**
     * 渲染近效期警告表格和分页控件
     */
    function renderExpiryWarningTable(products, currentPage, totalPages) {
        const expiryWarningTable = $('#expiryWarningTable').find('tbody');
        expiryWarningTable.empty();
        
        if (!products || products.length === 0) {
            expiryWarningTable.html('<tr><td colspan="6" class="text-center">暂无近效期警告</td></tr>');
            return;
        }
        
        const today = new Date();
        today.setHours(0, 0, 0, 0); // 设置为今天的0点0分0秒，便于比较
        
        products.forEach(function(product) {
            // 格式化日期为年月日格式
            let formattedDate = product.expiry_date;
            let isExpired = false;
            
            if (product.expiry_date) {
                const date = new Date(product.expiry_date);
                if (!isNaN(date.getTime())) {
                    formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
                    // 检查是否已过期
                    date.setHours(0, 0, 0, 0);
                    isExpired = date < today;
                }
            }
            
            // 如果已过期，添加text-danger类实现红色字体突出显示
            const rowClass = isExpired ? 'text-danger' : '';
            
            const row = `<tr class="${rowClass}">
                <td>${product.barcode}</td>
                <td>${product.name}</td>
                <td>${product.price}</td>
                <td>${product.unit}</td>
                <td>${product.stock}</td>
                <td>${formattedDate}</td>
            </tr>`;
            expiryWarningTable.append(row);
        });    
        // 渲染分页控件
        renderExpiryWarningPagination(currentPage, totalPages);
    }
    
    /**
     * 渲染近效期警告分页控件
     */
    function renderExpiryWarningPagination(currentPage, totalPages) {
        const paginationContainer = $('#expiryWarningPagination');
        paginationContainer.empty();
        
        if (totalPages <= 1) {
            return; // 只有一页数据，不需要分页
        }
        
        const paginationHtml = `
            <nav aria-label="近效期警告分页">
                <ul class="pagination justify-content-center">
                    <li class="page-item ${currentPage === 1 ? 'disabled' : ''}">
                        <a class="page-link page-nav" href="#" data-page="${currentPage - 1}">上一页</a>
                    </li>
                    ${generatePageButtons(currentPage, totalPages)}
                    <li class="page-item ${currentPage === totalPages ? 'disabled' : ''}">
                        <a class="page-link page-nav" href="#" data-page="${currentPage + 1}">下一页</a>
                    </li>
                </ul>
            </nav>
        `;
        
        paginationContainer.html(paginationHtml);
        
        // 添加事件监听器
        $('.page-nav').on('click', function(e) {
            e.preventDefault();
            const page = $(this).data('page');
            loadExpiryWarnings(page);
        });
    }
    
    /**
     * 生成页码按钮
     */
    function generatePageButtons(currentPage, totalPages) {
        let buttons = '';
        
        // 显示当前页附近的页码
        for (let i = Math.max(1, currentPage - 2); i <= Math.min(totalPages, currentPage + 2); i++) {
            buttons += `
                <li class="page-item ${currentPage === i ? 'active' : ''}">
                    <a class="page-link page-nav" href="#" data-page="${i}">${i}</a>
                </li>
            `;
        }
        
        return buttons;
    }
    /*
    *点击开始结算按钮，结算当前购物车商品
    */ 
    function handleSettleClick() {
           console.log('点击了结算按钮');      
         // 显示对应的内容区域
        $('.card-content').addClass('d-none');
        $('#' + 'settle_item').removeClass('d-none');
        
     }
     
     /*
     * 处理结算逻辑
     */
     function handleSettleBill() {
         const currentLang = window.currentLang || 'zh';
         const trans = window.translations?.[currentLang];
         
         // 获取购物车中的商品
         if (window.CartModule) {
             const cartItems = window.CartModule.getCart();
             
             // 检查购物车是否为空
             if (!cartItems || cartItems.length === 0) {
                 alert(trans?.emptyCart || '购物车为空');
                 return;
             }
             
             // 调用TransactionModule进行结算
             if (window.TransactionModule) {
                 window.TransactionModule.settleBill(cartItems)
                     .done(function(response) {
                         // 结算成功
                         alert(trans?.settleSuccess || '结算成功！');
                         // 清空购物车
                         window.CartModule.clearCart();
                         // 刷新购物车显示
                         updateCartDisplay();
                         // 可以跳转到结算详情或交易记录页面
                         handleMenuSwitch('settle_detail');
                     })
                     .fail(function(xhr) {
                         // 结算失败
                         const errorMsg = xhr.responseJSON?.message || trans?.settleFailed || '结算失败';
                         alert(errorMsg);
                     });
             }
         }
     }
    // 暴露loadExpiryWarnings函数到全局作用域，以便在HTML中直接调用
    window.loadExpiryWarnings = loadExpiryWarnings;
})(window);